package com.example.blog.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.example.blog.entity.Blog;

@Mapper
public interface BlogMapper {
    /**
     * 通过博客ID查询
     */
    Blog selectByPrimaryKey(Integer blogId);
    
    /**
     * 查询所有博客
     */
    List<Blog> selectAll();
    
    /**
     * 通过用户ID查询博客
     */
    List<Blog> selectByUserId(Integer userId);
    
    /**
     * 通过分类ID查询博客
     */
    List<Blog> selectByTypeId(Integer typeId);
    
    /**
     * 查询用户发布的博客
     */
    List<Blog> selectPublishedByUserId(Integer userId);
    
    /**
     * 查询所有已发布的博客
     */
    List<Blog> selectAllPublished();
    
    /**
     * 查询热门博客（按浏览量降序）
     */
    List<Blog> selectHotBlogs(Integer limit);
    
    /**
     * 模糊查询博客（标题和内容）
     */
    List<Blog> selectByKeyword(String keyword);
    
    /**
     * 插入博客记录
     */
    int insert(Blog blog);
    
    /**
     * 更新博客记录
     */
    int updateByPrimaryKey(Blog blog);
    
    /**
     * 更新博客状态（发布/草稿）
     */
    int updatePublishStatus(@Param("blogId") Integer blogId, @Param("isPublished") Boolean isPublished);
    
    /**
     * 更新博客状态（启用/禁用）
     */
    int updateDisableStatus(@Param("blogId") Integer blogId, @Param("isDisabled") Boolean isDisabled);
    
    /**
     * 更新浏览量
     */
    int incrementViews(Integer blogId);
    
    /**
     * 更新点赞数
     */
    int updateLikes(@Param("blogId") Integer blogId, @Param("increment") Integer increment);
    
    /**
     * 更新评论数
     */
    int updateComments(@Param("blogId") Integer blogId, @Param("increment") Integer increment);
    
    /**
     * 删除博客记录
     */
    int deleteByPrimaryKey(Integer blogId);
    
    /**
     * 删除用户的所有博客
     */
    int deleteByUserId(Integer userId);
    
    /**
     * 获取所有博客（分页）
     */
    List<Blog> selectAllBlogs(String query, Integer typeId, Integer offset, Integer pageSize);
    
    /**
     * 获取所有已发布博客（分页）
     */
    List<Blog> selectPublishedBlogs(String query, Integer typeId, Integer offset, Integer pageSize);
    
    /**
     * 获取博客总数
     */
    int countAllBlogs(String query, Integer typeId);
    
    /**
     * 获取已发布博客总数
     */
    int countPublishedBlogs(String query, Integer typeId);
    
    /**
     * 获取热门博客（最新/最多浏览/最多点赞）
     * @param sortType 排序类型：latest-最新，views-最多浏览，likes-最多点赞
     * @return 博客列表
     */
    List<Blog> selectTopBlogs(@Param("sortType") String sortType);
    
    /**
     * 增加点赞数
     */
    int incrementLikes(Integer blogId);
} 